"""

students = [
    {"name": "Alice", "age": 20, "scores": {"Math": 85, "English": 90}},
    {"name": "Bob", "age": 22, "scores": {"Math": 78, "Physics": 88}},
    {"name": "Charlie", "age": 21, "scores": {"English": 88, "Chemistry": 92, "Biology": 85}},
    {"name": "David", "age": 20, "scores": {"Math": 95}}
]
任务要求：

姓名排序输出
使用列表推导式生成按字母顺序排序的学生姓名列表
课程统计字典
用字典推导式创建课程统计字典，格式：{课程名: [所有学生该课程的分数列表]}
平均年龄计算
使用生成器表达式计算全体学生平均年龄（保留两位小数）
多课程学生筛选
找出选修≥2门课程的学生姓名集合（使用集合操作）
年龄降序排序
使用列表的sort()方法和lambda函数，按年龄从高到低排序学生记录
附加挑战（选做）：

使用生成器表达式实现课程统计字典的创建
找出同时选修"Math"和"English"的学生姓名

"""
import random
students=[{"name":x,
           "age":random.randint(20,25),
           "score":{courses:random.randint(50,100) for courses in (["Math","English"] if x=="Alice"
                                                                else (["Math","Physics"] if x=="Bob"
                                                                else(["English","Chemistry","Biology"] if x=="Charlie"
                                                                else ["Math"])))}
           } for x in ["Charlie","David","Bob","Alice"]]
for student in students:
    print(student)
# 使用列表推导式生成按字母顺序排序的学生姓名列表
student_name=sorted((student["name"] for student in students),reverse=False)
# print(student_name)
# 用字典推导式创建课程统计字典，格式：{课程名: [所有学生该课程的分数列表]}
courses_count={course:[student["score"][course] for student in students if course in student["score"]] for course in ["Math","English","Physics","Chemistry","Biology"]}
print(courses_count)
# 使用生成器表达式计算全体学生平均年龄（保留两位小数）
student_avg_age=round(sum(student["age"] for student in students)/len(students),2)
print(student_avg_age)
# 找出选修≥2门课程的学生姓名集合（使用集合操作）
course_over2_name={student["name"] for student in students if len(student["score"])>=2}
print(course_over2_name)
# 使用列表的sort()方法和lambda函数，按年龄从高到低排序学生记录
student_arrange_age=students.sort(key=lambda x:x["age"],reverse=True)
for x in students:
    print(x)
